###########################################################################
# $Id: dbManagerMySQL.p 13 2009-04-17 10:30:44Z donbeave $
###########################################################################

@CLASS
dbManagerMySQL

@USE
db/dbManager.p
pf/collections/pfArrayList.p

@BASE
dbManager

@OPTIONS
locals

#----- Constructor -----

@create[hshConfig]
  ^BASE:create[]

#----- Public -----

@useSchema[strName]
  ^CSQL.void{
    USE $strName
  }

@getSchemas[]
  $result[^pfArrayList::create[]]

  $tSchemas[^CSQL.table{
    SHOW SCHEMAS
  }]

  ^if($tSchemas){
    ^tSchemas.menu{
      $oItem[^_createSchemaItem[$tSchemas.Database]]

      ^result.add[$oItem]
    }
  }

@getTables[strSchema]
  $result[^pfArrayList::create[]]

  $tTables[^CSQL.table{
    SHOW TABLES FROM `$strSchema`
  }]

  ^if($tTables){
    ^tTables.menu{
      $oItem[^_createTableItem[$tTables.Tables_in_$strSchema]]

      ^oItem._setSchemaName[$strSchema]

      ^result.add[$oItem]
    }
  }

@getTableFields[strTable;strSchema]
  $result[^pfArrayList::create[]]

  $tFields[^CSQL.table{
    SHOW COLUMNS FROM `$strTable` FROM `$strSchema`
  }]

  ^if($tFields){
    ^tFields.menu{
      $hData[
        $.name[$tFields.Field]
        $.defaultValue[$tFields.Default]
        $.isNull(false)
      ]

      ^if($tFields.Null eq "YES"){
        $hData.isNull(true)
      }

#     разбираем строку с типом
      ^tFields.Type.match[^(\w+)(?:\((\d+)\))?][x]{
        $sType[$match.1]
        $hData.length[$match.2]
      }

      $oField[^_createField[$sType;$hData]]

      ^oField._setSchemaName[$strSchema]
      ^oField._setTableName[$strTable]

      ^result.add[$oField]
    }
  }